import array
import select
import time


def tcp_read_wait(s, nBytes, sTimeout):
    # Aqui vamos almacenando el mensaje leido
    datos = array.array('c')

    # Este es el numero de bytes pendientes de leer
    nBytesFaltan = nBytes

    # Para controlar el timeout. Disponemos de sTimeout segundos
    inicio = time.time()
    limiteTiempo = inicio + sTimeout
 
    while nBytesFaltan > 0:
          # Miramos si ya ha pasado el tiempo disponible
          ahora = time.time()
          if ahora > limiteTiempo:
             break
          # Miramos si hay datos disponibles en el socket
          (rr, wr, er) = select.select([s], [], [], limiteTiempo - ahora)
          if len(rr) == 0:
             break
          # Leemos los bytes que podamos
          msg = s.recv(nBytesFaltan)
	  nBytesFaltan = nBytesFaltan - len(msg)
	  datos.extend(msg)

    return (datos, len(datos))
